project(graphics-hook)

find_package(Detours REQUIRED)
find_package(Vulkan REQUIRED)

add_library(graphics-hook MODULE)
add_library(OBS::graphics-hook ALIAS graphics-hook)

target_sources(
  graphics-hook
  PRIVATE graphics-hook.c
          graphics-hook.h
          gl-capture.c
          gl-decs.h
          d3d8-capture.cpp
          d3d9-capture.cpp
          d3d9-patches.hpp
          dxgi-capture.cpp
          d3d10-capture.cpp
          d3d11-capture.cpp
          d3d12-capture.cpp
          ../obfuscate.c
          ../obfuscate.h
          ../graphics-hook-ver.h
          ../graphics-hook-info.h
          ../hook-helpers.h
          graphics-hook.rc)

target_include_directories(graphics-hook PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..)

target_link_libraries(graphics-hook PRIVATE OBS::ipc-util Detours::Detours
                                            dxguid)

if(MSVC)
  target_compile_options(graphics-hook PRIVATE "$<IF:$<CONFIG:Debug>,/MTd,/MT>")
  add_target_resource(win-capture "$<TARGET_PDB_FILE:graphics-hook>"
                      "obs-plugins/win-capture/" OPTIONAL)
endif()

set_target_properties(
  graphics-hook
  PROPERTIES FOLDER "plugins/win-capture"
             OUTPUT_NAME
             "graphics-hook$<IF:$<EQUAL:${CMAKE_SIZEOF_VOID_P},8>,64,32>")

target_compile_definitions(graphics-hook PRIVATE COMPILE_D3D12_HOOK)

if(TARGET Vulkan::Vulkan)
  target_sources(graphics-hook PRIVATE vulkan-capture.c vulkan-capture.h)

  target_link_libraries(graphics-hook PRIVATE Vulkan::Vulkan)

  target_compile_definitions(graphics-hook PRIVATE COMPILE_VULKAN_HOOK)

  add_target_resource(
    win-capture "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan64.json"
    "obs-plugins/win-capture/")
  add_target_resource(
    win-capture "${CMAKE_CURRENT_SOURCE_DIR}/obs-vulkan32.json"
    "obs-plugins/win-capture/")
endif()

add_target_resource(win-capture "$<TARGET_FILE:graphics-hook>"
                    "obs-plugins/win-capture/")

add_dependencies(win-capture graphics-hook)
